package main.java.br.com.projeto.domain.dao;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import main.java.br.com.projeto.domain.entity.ContaPagar;

public class DaoContaPagar extends Dao<ContaPagar>{

	/**
	 * 
	 */
	private static final long serialVersionUID = -726680097828286137L;
	
	public DaoContaPagar() {
		super(ContaPagar.class);
	}
	
	public List<ContaPagar> listByCompra (String numeroNota, String numeroSerie, Long fornecedorId)
	{
		String hql = "select ContaPagar from ContaPagar contaPagar "
				+ "join contaPagar.compra compra "
				+ "where compra.notaPK.numeroNota = :numeroNota " 
				+ "and compra.notaPK.numeroSerie = :numeroSerie "
				+ "and compra.fornecedor.id = :fornecedorId";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("numeroNota", numeroNota);
		parameters.put("numeroSerie", numeroSerie);
		parameters.put("fornecedorId", fornecedorId);

		return this.findOneResult(hql, parameters);
	}
	
	public List<ContaPagar> listByFilter(Long id, String nomeFornecedor, Date dataVencimento) {
		String hql = "select contaPagar from ContaPagar contaPagar "
				+ "where (contaPagar.id = :id or :id = 0) "
				+ "and (lower(contaPagar.fornecedor.nome) like '%' || lower ( cast(:nomeFornecedor as string) ) || '%' or :nomeFornecedor = null) "
				+ "and (contaPagar.dataVencimento <= :dataVencimento or cast(:dataVencimento as date) = null)";

		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("id", id);
		parameters.put("nomeFornecedor", nomeFornecedor);
		parameters.put("dataVencimento", dataVencimento);

		return this.findOneResult(hql, parameters);
	}
}
